package inge_soft.gestoriusNuevo.business.service.abstraction;

import inge_soft.gestoriusNuevo.persistence.entity.implementation.Actividad;
import inge_soft.gestoriusNuevo.persistence.entity.implementation.Estado;
import inge_soft.gestoriusNuevo.persistence.entity.implementation.Evento;
import inge_soft.gestoriusNuevo.persistence.entity.implementation.TipoActividad;

import java.util.List;

import org.springframework.dao.DataAccessException;

/**
 * Interface (representa la abstraccion) de todos los servicios necesarios para
 * manipular Actividades
 *
 * @author ariel
 *
 */
public interface IActividadService {

        /**
         * Obtiene todas las actividades pertenecientes a un evento
         * @param evento al cual pertenecen las actividades
         * @return lista de actividades
         * @throws DataAccessException si hay problemas de persistencia
         */
        public List<Actividad> obtenerTodasActividades(Evento evento) throws DataAccessException;
       
        /**
         * Crea la Actividad, asociandola al Evento solicitado
         * @param evento previamente creado
         * @param actividad a crear y asociar al evento
         * @throws DataAccessException si hay problemas de persistencia
         */
        public void crearActividad(Evento evento, Actividad actividad) throws DataAccessException;
       
        /**
         * Modifica una actividad previamente creada
         * @param actividad a modificar
         * @throws DataAccessException si hay problemas de persistencia
         */
        public void modificarActividad(Actividad actividad) throws DataAccessException;
       
        /**
         * Obtiene todos los tipos de actividad
         * @return lista con los tipos de actividad
         * @throws DataAccessException si hay problemas de persistencia
         */
        public List<TipoActividad> obtenerTodosTiposActividad() throws DataAccessException;
       
        /**
         * Obtiene todos los Estados posibles para una actividad
         * @return lista con los estados
         * @throws DataAccessException si hay problemas de persistencia
         */
        public List<Estado> obtenerTodosEstados() throws DataAccessException;
        
        public List<Actividad> obtenerTodasActividades()
    			throws DataAccessException;
        
        public Actividad obtenerActividad(Long id);
        
        public TipoActividad obtenerTipoActividad(String nombre)
    			throws DataAccessException;
        
        public Evento obtenerEvento(Long idEvento);
        
        public Estado obtenerEstado(String nombre) throws DataAccessException;
        
        
}
